package fhp.hlhj.giantfold.network

import com.alibaba.fastjson.JSON
import com.lzy.okgo.OkGo
import com.lzy.okgo.convert.Converter
import com.lzy.okgo.convert.StringConvert
import com.lzy.okgo.model.HttpParams
import com.lzy.okgo.model.Response
import com.lzy.okrx.adapter.ObservableBody
import com.lzy.okrx.adapter.ObservableResponse
import fhp.hlhj.giantfold.converter.Convert
import fhp.hlhj.giantfold.converter.JsonConvert
import fhp.hlhj.giantfold.javaBean.*
import fhp.hlhj.giantfold.module.OtherLoginBean
import rx.Observable
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers

/**
 * author: FHP
 * data: on 2017\12\4 0004 10:55
 * E-Mail: 103945089@qq.com
 */
object UrlApis {
    /**
     * 获取淘客Token
     */
    fun initTaoke(url:String): Observable<TaoKeBean.TaoKeKt> {
        return OkGo.post<TaoKeBean.TaoKeKt>(url)
                .params("username","cq_tuoqianchen")
                .params("password","3OKDJkjuxuN7")
                .converter(object :JsonConvert<TaoKeBean.TaoKeKt>(){})
                .adapt(ObservableBody())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
    }
    fun initTaokeStr(url:String): Observable<String> {
        return OkGo.post<String>(url)
                .params("username","cq_tuoqianchen")
                .params("password","3OKDJkjuxuN7")
                .converter(object :StringConvert(){})
                .adapt(ObservableBody())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
    }

    /**
     * 获取分类列表
     */
    fun getTypes(url: String,token:String?): Observable<TypesBean> {
       return OkGo.get<TypesBean>(url)
                .params("token",token)
                .converter(object :JsonConvert<TypesBean>(){})
                .adapt(ObservableBody())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
    }
    fun getTypesStr(url: String,token:String?): Observable<ErroBean> {
       return OkGo.get<ErroBean>(url)
                .params("token",token)
                .converter(object :JsonConvert<ErroBean>(){})
                .adapt(ObservableBody())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
    }
    /**
     * 获取淘客列表数据
     */
    fun getGoods(params:HttpParams): Observable<SuperMarketListBean> {
       return OkGo.get<SuperMarketListBean>(Urls.GetTKGOODS)
                .params(params)
                .converter(object :JsonConvert<SuperMarketListBean>(){})
                .adapt(ObservableBody())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
    }

    fun getGoodsNextPage(params:HttpParams,url:String): Observable<SuperMarketListBean> {
       return OkGo.get<SuperMarketListBean>(url)
                .params(params)
                .converter(object :JsonConvert<SuperMarketListBean>(){})
                .adapt(ObservableBody())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
    }
    /**
     * 获取商品详情
     */
    fun getGoodsDetail(params: HttpParams,goodId:String): Observable<GoodsDetailBean> {
        return OkGo.get<GoodsDetailBean>(Urls.publicUrl+Urls.getGoodDetail+"{$goodId}")
                .params(params)
                .converter(object :JsonConvert<GoodsDetailBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 获取短信验证码
     */
    fun getSMSCode(params: HttpParams):Observable<GetSmsBean>{
        return OkGo.post<GetSmsBean>(Urls.BaseUrl+Urls.GET_SMS)
                .params(params)
                .converter(object :JsonConvert<GetSmsBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 手机注册
     */
    fun phoneRegis(params: HttpParams): Observable<PhoneRegisBean> {
       return OkGo.post<PhoneRegisBean>(Urls.BaseUrl+Urls.PHONE_REGISTER)
                .params(params)
                .converter(object :JsonConvert<PhoneRegisBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 手机登录
     */
    fun phoneLogin(params: HttpParams): Observable<PhoneLoginBean> {
        return OkGo.post<PhoneLoginBean>(Urls.BaseUrl+Urls.PHONE_LOGIN)
                .params(params)
                .converter(object :JsonConvert<PhoneLoginBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 账号登出
     */
    fun logOut(): Observable<LoginOutBean> {
        return  OkGo.get<LoginOutBean>(Urls.BaseUrl+Urls.LOGIN_OUT)
                .converter(object :JsonConvert<LoginOutBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 忘记密码第一步
     */
    fun forget1(params: HttpParams): Observable<ForgetBean> {
        return OkGo.post<ForgetBean>(Urls.BaseUrl+Urls.FORGET_1)
                .params(params)
                .converter(object :JsonConvert<ForgetBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 修改密码
     */
    fun changePwd(params: HttpParams): Observable<ChangePwdBean> {
        return OkGo.post<ChangePwdBean>(Urls.BaseUrl+Urls.CHANGEPWD)
                .params(params)
                .converter(object :JsonConvert<ChangePwdBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取三方登陆key
     */
    fun getKey(params: HttpParams): Observable<GetKeyBean>{
        return OkGo.post<GetKeyBean>(Urls.BaseUrl+Urls.GETKEY)
                .params(params)
                .converter(object :JsonConvert<GetKeyBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /***
     * 获得商品分类
     */
    fun getType(params: HttpParams): Observable<TypesBean> {
       return OkGo.get<TypesBean>(Urls.GetGOODSTYPE)
                .params(params)
                .converter(object :JsonConvert<TypesBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取一级菜单
     */
    fun getFirst(params: HttpParams): Observable<TittleBean> {
        return OkGo.get<TittleBean>(Urls.BaseUrl+Urls.GET_FIRST)
                .params(params)
                .converter(object :JsonConvert<TittleBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取二级
     */
    fun getMall(params: HttpParams): Observable<MallBean> {
        return OkGo.get<MallBean>(Urls.BaseUrl+Urls.GETMALL)
                .params(params)
                .converter(object :JsonConvert<MallBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取商品列表
     */
    fun getGood(params: HttpParams): Observable<GoodListBean> {
        return OkGo.get<GoodListBean>(Urls.BaseUrl+Urls.GETGOODS)
                .params(params)
                .converter(object :JsonConvert<GoodListBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 绑定手机
     */
    fun bindPhone(params: HttpParams): Observable<BindPhoneBean> {
        return OkGo.post<BindPhoneBean>(Urls.BaseUrl+Urls.BINDPHONE)
                .params(params)
                .converter(object :JsonConvert<BindPhoneBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 拉取用户信息
     */
    fun getUserInfo(params: HttpParams): Observable<UserInfoBean> {
        return OkGo.get<UserInfoBean>(Urls.BaseUrl+Urls.GETUSERINFO)
                .params(params)
                .converter(object :JsonConvert<UserInfoBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 修改用户信息
     */
    fun changeUserInfo(params: HttpParams): Observable<ChangeInfoBean> {
        return OkGo.post<ChangeInfoBean>(Urls.BaseUrl+Urls.CHANGE_INFO)
                .isMultipart(true)
                .params(params)
                .converter(object :JsonConvert<ChangeInfoBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 三方登陆
     */
    fun otherLogin(params: HttpParams): Observable<OtherLoginBean> {
        return OkGo.post<OtherLoginBean>(Urls.BaseUrl+Urls.OTHER_LOGIN)
                .params(params)
                .converter(object :JsonConvert<OtherLoginBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /***
     * 弹框
     */
    fun getPop(params: HttpParams): Observable<PopBean> {
        return OkGo.get<PopBean>(Urls.BaseUrl+Urls.POPS)
                .params(params)
                .converter(object :JsonConvert<PopBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 创建订单
     */
    fun createOrder(params: HttpParams): Observable<BaseBean> {
        return OkGo.post<BaseBean>(Urls.BaseUrl+Urls.CREATE_ORDER)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 修改订单
     */
    fun changeOrder(params: HttpParams): Observable<BaseBean> {
        return OkGo.post<BaseBean>(Urls.BaseUrl+Urls.CHANGE_ORDER)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 获取订单列表
     */
    fun getSelfOrder(params: HttpParams): Observable<SelfOrderBean> {
        return OkGo.get<SelfOrderBean>(Urls.BaseUrl+Urls.ORDERLIST)
                .params(params)
                .converter(object :JsonConvert<SelfOrderBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取广告
     */
    fun getAdvs(params: HttpParams): Observable<AdvBean> {
        return OkGo.get<AdvBean>(Urls.BaseUrl+Urls.ADV)
                .params(params)
                .converter(object :JsonConvert<AdvBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 提现明细
     */
    fun getCashDetail(params: HttpParams): Observable<CashDetailBean> {
        return OkGo.get<CashDetailBean>(Urls.BaseUrl+Urls.TIXIAN_DETAIL)
                .params(params)
                .converter(object :JsonConvert<CashDetailBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 收益明细
     */
    fun getGainDetail(params: HttpParams): Observable<GainDetailBean> {
        return OkGo.get<GainDetailBean>(Urls.BaseUrl+Urls.GAINDETAIL)
                .params(params)
                .converter(object :JsonConvert<GainDetailBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 消费总额明细
     */
    fun getSpendDetail(params: HttpParams): Observable<GainDetailBean> {
        return OkGo.get<GainDetailBean>(Urls.BaseUrl+Urls.SPENDDETAIL)
                .params(params)
                .converter(object :JsonConvert<GainDetailBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 余额明细
     */
    fun getAvalableDetail(params: HttpParams): Observable<GainDetailBean> {
        return OkGo.get<GainDetailBean>(Urls.BaseUrl+Urls.AVALIABLE)
                .params(params)
                .converter(object :JsonConvert<GainDetailBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 提现申请
     */
    fun createGetCash(params: HttpParams): Observable<BaseBean> {
        return OkGo.post<BaseBean>(Urls.BaseUrl+Urls.CREEATE_GETCASH)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 绑定支付宝
     */
    fun bindAli(params: HttpParams): Observable<BaseBean> {
        return OkGo.post<BaseBean>(Urls.BaseUrl+Urls.BIND_ALI)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 京东接口
     */
    fun jdList(params: HttpParams): Observable<Response<String>>? {
        return OkGo.get<String>(Urls.JDURL)
                .params(params)
                .converter(object :JsonConvert<String>(){})
                .adapt(ObservableResponse<String>())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 翻牌
     */
    fun flip(params: HttpParams): Observable<FlipBean> {
        return OkGo.post<FlipBean>(Urls.BaseUrl+Urls.FLIP)
                .params(params)
                .converter(object :JsonConvert<FlipBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 意见反馈
     */
    fun report(params: HttpParams): Observable<BaseBean> {
        return OkGo.post<BaseBean>(Urls.BaseUrl+Urls.REPORT)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     *查看翻牌记录
     */
    fun checkFlip(params: HttpParams): Observable<CheckFlipBean> {
        return OkGo.post<CheckFlipBean>(Urls.BaseUrl+Urls.CHECK_FLIP)
                .params(params)
                .converter(object :JsonConvert<CheckFlipBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 获取商户列表
     */
    fun getSellers(): Observable<SellersBean> {
        return OkGo.get<SellersBean>(Urls.BaseUrl+Urls.GET_SELLERS)
                .converter(object :JsonConvert<SellersBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取商户信息
     */
    fun getMerchantDetail(params: HttpParams): Observable<MerchantBean> {
        return OkGo.get<MerchantBean>(Urls.BaseUrl+Urls.SELLER_DETAIL)
                .params(params)
                .converter(object :JsonConvert<MerchantBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 邀请好友
     */
    fun getFriendsRank(params: HttpParams): Observable<FriendsRankBean> {
        return OkGo.get<FriendsRankBean>(Urls.BaseUrl+Urls.FRIENDINFO)
                .params(params)
                .converter(object :JsonConvert<FriendsRankBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获得年化率影响
     */
    fun getEF(params: HttpParams): Observable<EFBean> {
        return OkGo.get<EFBean>(Urls.BaseUrl+Urls.GETEF)
                .params(params)
                .converter(object :JsonConvert<EFBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 摇红包
     */
    fun shakeRed(params: HttpParams): Observable<ShakeRedBean> {
        return OkGo.get<ShakeRedBean>(Urls.BaseUrl+Urls.SHAKE_RED)
                .params(params)
                .converter(object :JsonConvert<ShakeRedBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 摇红包列表
     */
    fun shakeRedList(params: HttpParams): Observable<ShakeRedListBean> {
        return OkGo.get<ShakeRedListBean>(Urls.BaseUrl+Urls.SHAKE_RED_LIST)
                .params(params)
                .converter(object :JsonConvert<ShakeRedListBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取参数
     */
    fun getConfig(params: HttpParams): Observable<ConfigBean> {
        return OkGo.get<ConfigBean>(Urls.BaseUrl+Urls.CONFIGDATA)
                .params(params)
                .converter(object :JsonConvert<ConfigBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 好友收益
     */
    fun getFriendsEf(params: HttpParams): Observable<FriendsEFBean> {
        return OkGo.get<FriendsEFBean>(Urls.BaseUrl+Urls.FRIENDSEF)
                .params(params)
                .converter(object :JsonConvert<FriendsEFBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 最新订单
     */
    fun getLastetOrder(params: HttpParams): Observable<LatestOrderBean>{
       return OkGo.get<LatestOrderBean>(Urls.BaseUrl+Urls.LATESTORDER)
                .params(params)
                .converter(object :JsonConvert<LatestOrderBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /*
    订单详情
     */
    fun orderDetail(params: HttpParams): Observable<OrderBean> {
        return OkGo.get<OrderBean>(Urls.BaseUrl+Urls.ORDER_DETAIL)
                .params(params)
                .converter(object :JsonConvert<OrderBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 消息中心
     */

    fun getMessageCenter(params: HttpParams): Observable<MessageCenterBean> {
        return OkGo.get<MessageCenterBean>(Urls.BaseUrl+Urls.MESSAGE_CENTER)
                .params(params)
                .converter(object :JsonConvert<MessageCenterBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 消息列表
     */

    fun getMessageList(params: HttpParams): Observable<MessageListBean> {
        return OkGo.get<MessageListBean>(Urls.BaseUrl+Urls.MESSAGE_LIST)
                .params(params)
                .converter(object :JsonConvert<MessageListBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取轮播图
     */
    fun getLunBo(params: HttpParams): Observable<LunBoBean> {
        return OkGo.get<LunBoBean>(Urls.BaseUrl+Urls.LUNBO)
                .params(params)
                .converter(object :JsonConvert<LunBoBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 上传小票
     */
    fun sendImg(params: HttpParams): Observable<BaseBean> {
        return OkGo.post<BaseBean>(Urls.BaseUrl+Urls.SEND_IMG)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

    /**
     * 获取红包
     */
    fun getRed(params: HttpParams): Observable<GetRedBean> {
        return OkGo.get<GetRedBean>(Urls.BaseUrl+Urls.GETDAYRED)
                .params(params)
                .converter(object :JsonConvert<GetRedBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 红包提现
     */
    fun redToCash(params: HttpParams): Observable<BaseBean> {
        return OkGo.post<BaseBean>(Urls.BaseUrl+Urls.RED_TO_CASH)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     *
     */
    fun shareRed(params: HttpParams): Observable<BaseBean> {
        return OkGo.get<BaseBean>(Urls.BaseUrl+Urls.SHARE_RED)
                .params(params)
                .converter(object :JsonConvert<BaseBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取最新版本
     */
    fun getVersion(): Observable<VersionBean> {
        return OkGo.get<VersionBean>(Urls.BaseUrl+Urls.VERSION)
                .params("type","android")
                .converter(object :JsonConvert<VersionBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }
    /**
     * 获取推荐搜索
     */
    fun getTags(): Observable<TagsBean> {
        return OkGo.get<TagsBean>(Urls.BaseUrl+Urls.TAGS)
                .params("type","android")
                .converter(object :JsonConvert<TagsBean>(){})
                .adapt(ObservableBody())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
    }

}